//引入axios、
import axios from 'axios';
//引入滚动条组件
import NProgress from 'nprogress';
//引入css的样式
import 'nprogress/nprogress.css';
//实例化axios
const request = axios.create({
    //路径，api1是post请求的接口
    baseURL:"/api1",
    //请求的时间
    timeout:10000
})
//添加请求拦截器
request.interceptors.request.use(function (config){
    //添加进度条启动的组件
    NProgress.start()
    //config是配置对象，请求的数据也在该对象的属性里，如果不return，会报错
    //当发送ajax请求的时候，在本地储存中拿到token并放在请求头上随着http发送
    const token = localStorage.getItem('user_token')
    config.headers.token = token;
    return config
},function(e){
    //进度条结束的
    NProgress.done()
    //当请求发生错误时，返回一个失败的promise实例
    return Promise.reject(e);
})
//添加响应拦截器
request.interceptors.response.use(function (response){
    NProgress.done()
    //做一个权限判断的异常，区分异常
    if(response.data.code===20000){
        return Promise.reject({
            message:response.data.msg,
            //只要请求是20000则表示没有权限
            isLogin:false
        })
    }
    //拿返回的code做判断，不为10000表示请求失败，执行语句里的表达式
    if (response.data.code!==10000){
         //进度条结束的
        //当响应发生错误时，返回一个失败的promise实例
        return Promise.reject({
            //将错误的信息添加到massage属性里，方便在请求结束时提供错的信息
            message:response.data.msg,
            //不为20000表示没有权限问题
            isLogin:true
        });
    }
    //如果没错，直接return，响应的数据
    return response.data.data
},function(e){
     //进度条结束的
    NProgress.done()
    //这里表示响应发生错误的时候返回的信息
    return Promise.reject(e);
})
//将实例的axios实例暴露给入口文件使用
export default request;
